//////////////////////////////////////////////////////////////////////
//
// NO_Test.h: interface for the NO_Test class.
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#include "NO_Test.h"

//////////////////////////////////////////////////////////////////////////
Base::Base()		{sl=0;}
Base::~Base(void)	{}

//////////////////////////////////////////////////////////////////////////
VirBaseL::VirBaseL(void)	{slb=10;}
VirBaseL::~VirBaseL(void)	{}

//////////////////////////////////////////////////////////////////////////
VirBaseR::VirBaseR(void)	{slc=20;}
VirBaseR::~VirBaseR(void)	{}

//////////////////////////////////////////////////////////////////////
Super::Super(void)	{slmt=3210;}
Super::~Super(void)	{}

//////////////////////////////////////////////////////////////////////////
//sMaster
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
SmallMaster::SmallMaster(void)	{base = new Base;}
SmallMaster::~SmallMaster(void)	{delete base;}

//////////////////////////////////////////////////////////////////////////
void SmallMaster::setBaseB(void){delete base; base = new Base;}
void SmallMaster::setBaseL(void){delete base; base = new VirBaseL;}
void SmallMaster::setBaseR(void){delete base; base = new VirBaseR;}
void SmallMaster::setBaseM(void){delete base; base = new Super;}

//////////////////////////////////////////////////////////////////////////
//fMaster
//////////////////////////////////////////////////////////////////////////

NO_UInt32 FullMaster::sInt = 0;
NO_UInt32 FullMaster::sIntArr[2] = {0,0};

//////////////////////////////////////////////////////////////////////////
// con/destruction
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
FullMaster::FullMaster(void):cInt(232),	cIntPtr(new int(343))
{
	func = &FullMaster::setValue;
	int i;
	for (i=0;i<4;i++){allArray[i]=0;}
	for (i=0;i<2;i++){intArray[i]=i;}
	value = 101;
	ptr = 0;
	ptrToSame = 0;
	ptrToInt = 0;
	dynamicArray = 0;
}

//////////////////////////////////////////////////////////////////////////
FullMaster::~FullMaster(void)	
{
		
	for(int i=0;i<2;i++){if(allArray[i]!=0) delete allArray[i];}
	if(ptr){delete ptr;}
	if(dynamicArray)	{delete [2] dynamicArray;}
	if(vecOfPtr.size())	{delete vecOfPtr[0];delete vecOfPtr[1];}
	delete (int*)cIntPtr;
}

//////////////////////////////////////////////////////////////////////////
// modify
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
void FullMaster::vecPtrMan(void)
{
	vecOfPtr.push_back(allArray[0]);
	vecOfPtr.push_back(allArray[1]);
	vecOfPtr.push_back(allArray[2]);
	vecOfPtr.push_back(allArray[3]);
}

//////////////////////////////////////////////////////////////////////////
void FullMaster::vecBaseMan(void)
{
	vecOfBase.push_back(Base());
	vecOfBase.push_back(VirBaseL());
	vecOfBase.push_back(VirBaseR());
	vecOfBase.push_back(Super());
}

//////////////////////////////////////////////////////////////////////////
void FullMaster::mapPtrMan(void)
{
	mapOfPtr[0]=(allArray[0]);
	mapOfPtr[1]=(allArray[1]);
	mapOfPtr[2]=(allArray[2]);
	mapOfPtr[3]=(allArray[3]);
}

//////////////////////////////////////////////////////////////////////////
void FullMaster::mapBaseMan(void)
{
	mapOfBase[0]=(Base());
	mapOfBase[1]=(VirBaseL());
	mapOfBase[2]=(VirBaseR());
	mapOfBase[3]=(Super());
}

//////////////////////////////////////////////////////////////////////////
void FullMaster::setSTL(void)
{
	Base b1;
	Base b2;
	b1.sl = 1;
	b2.sl = 2;
	vecOfBase.push_back(b1);
	vecOfBase.push_back(b2);
	vecOfPtr.push_back(new Base());
	vecOfPtr.push_back(new Base());
	
	mapOfBase[1]=b1;
	mapOfBase[2]=b2;
	
	mapOfPtr[1] = vecOfPtr[0];
	mapOfPtr[2] = vecOfPtr[1];
	
	Base* p1 = mapOfPtr[1];
	Base* p2 = vecOfPtr[0];
}

//////////////////////////////////////////////////////////////////////////
void FullMaster::setIntArray(void)	{for(int i=0;i<2;i++){intArray[i]=i*101;};ptrToInt = &intArray[1];}
void FullMaster::setValue(void)		{value = 202;}
void FullMaster::madePtrPtr(void)	{ptr = new Super; ptrToSame = ptr;}
void FullMaster::delPtrPtr(void)	{delete ptr; ptrToSame = 0;}

//////////////////////////////////////////////////////////////////////////
void FullMaster::setDynamicBase(void)	{if(dynamicArray) {delete [2] dynamicArray;} dynamicArray = new Base[2];}
void FullMaster::setDynamicSuper(void)	{if(dynamicArray) {delete [2] dynamicArray;} dynamicArray = new Super[2];}

//////////////////////////////////////////////////////////////////////////
void FullMaster::setBaseB(void){delete allArray[0]; allArray[0] = new Base;		ptrIntoArray = allArray[0];}
void FullMaster::setBaseL(void){delete allArray[1]; allArray[1] = new VirBaseL; ptrIntoArray = allArray[1];}
void FullMaster::setBaseR(void){delete allArray[2]; allArray[2] = new VirBaseR; ptrIntoArray = allArray[2];}
void FullMaster::setBaseM(void){delete allArray[3]; allArray[3] = new Super;	ptrIntoArray = allArray[3];}

//////////////////////////////////////////////////////////////////////////
void FullMaster::setNoPointer(void){noObjectToSame = noObject;}

//////////////////////////////////////////////////////////////////////////
// modify
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
void FullMaster::setValueTo(NO_UInt32 v){value = v;}

//////////////////////////////////////////////////////////////////////////
// test functions
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_UInt32 refRet = 0;

//////////////////////////////////////////////////////////////////////////
NO_UInt32	FullMaster::t(void)				{return value;}
NO_UInt32	FullMaster::tc(void)	const	{return value;}
NO_UInt32&	FullMaster::tr(void)			{return value;}
NO_UInt32&	FullMaster::trc(void)	const	{return refRet;}

//////////////////////////////////////////////////////////////////////////
NO_UInt32	FullMaster::t1(NO_UInt32)			{return value;}
NO_UInt32	FullMaster::t1c(NO_UInt32)	const	{return value;}
NO_UInt32&	FullMaster::t1r(NO_UInt32)			{return value;}
NO_UInt32&	FullMaster::t1rc(NO_UInt32)	const	{return refRet;}

//////////////////////////////////////////////////////////////////////////
NO_UInt32	FullMaster::t2(NO_UInt32,NO_UInt32)				{return value;}
NO_UInt32	FullMaster::t2c(NO_UInt32,NO_UInt32)	const	{return value;}
NO_UInt32&	FullMaster::t2r(NO_UInt32,NO_UInt32)			{return value;}
NO_UInt32&	FullMaster::t2rc(NO_UInt32,NO_UInt32)	const	{return refRet;}

